home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 20
/
Cream of the Crop 20 (Terry Blount) (1996).iso
/
program
/
cuj0796.zip
/
PLAUGER.ZIP
/
MEMORY5
< prev
next >
Wrap
Text File
|
1996-04-24
|
2KB
|
63 lines
--------------- Listing 4: <memory>, part 5 -------------
// TEMPLATE CLASS _Temp_iterator
template<class T>
class _Temp_iterator
: public iterator<output_iterator_tag, void, void> {
typedef T _FARQ *Pty;
public:
_Temp_iterator(_PDFT n = 0)
{const pair<Pty, _PDFT> pnpair =
/// get_temporary_buffer<T>(n);
get_temporary_buffer(n, (Pty)0); ///
Buf.Begin = pnpair.first;
Buf.Cur = pnpair.first;
Buf.Hiwater = pnpair.first;
Buf.Len = pnpair.second;
Pb = &Buf; }
_Temp_iterator(const _Temp_iterator<T>& x)
{Buf.Begin = 0;
Buf.Cur = 0;
Buf.Hiwater = 0;
Buf.Len = 0;
*this = x; }
~_Temp_iterator()
{if (Buf.Begin != 0)
{for (Pty first = Buf.Begin;
first != Buf.Hiwater; ++first)
_Destroy(&*first);
return_temporary_buffer(Buf.Begin); }}
_Temp_iterator<T>& operator=(const _Temp_iterator<T>& x)
{Pb = x.Pb;
return (*this); }
_Temp_iterator<T>& operator=(const T& val)
{if (Pb->Cur < Pb->Hiwater)
*Pb->Cur++ = val;
else
{_Construct(&*Pb->Cur, val);
Pb->Hiwater = ++Pb->Cur; }
return (*this); }
_Temp_iterator<T>& operator*()
{return (*this); }
_Temp_iterator<T>& operator++()
{return (*this); }
_Temp_iterator<T>& operator++(int)
{return (*this); }
_Temp_iterator<T>& Init()
{Pb->Cur = Pb->Begin;
return (*this); }
Pty First() const
{return (Pb->Begin); }
Pty Last() const
{return (Pb->Cur); }
_PDFT Maxlen() const
{return (Pb->Len); }
private:
struct Bufpar {
Pty Begin;
Pty Cur;
Pty Hiwater;
_PDFT Len;
} Buf, *Pb;
};